/*
 *  Copyright (C) 2010 Glauco
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.balisunrise.common;

import java.io.Serializable;

/**
 * Editor de uma entidade. Possui uma representação visual que deve ser composta
 * por uma parte para Mensagens, uma parte para o painel de edição dos atributos
 * da entidade e outra parte para as ações.
 * @author Glauco
 * @param <P> Entity Panel
 * @param <M> Messenger
 * @param <A> EntityActions
 * @param <V> Representação Visual do Editor
 */
public interface Editor
        <P extends EntityPanel, M extends Messenger, A extends EntityActions, V>
        extends VisualEntity<V> {

    /**
     * atribui o painel editor de atributos da entidade ao Editor.
     *
     * @param panel
     */
    public void setEntityPanel(P panel);

    /**
     * Retorna o painel editor de atributos da entidade.
     */
    public P getEntityPanel();

    /**
     * Atribui o Messenger do Editor.
     *
     * @param messenger
     */
    public void setMessenger(M messenger);

    /**
     * Retorna o Messenger do Editor.
     */
    public M getMessenger();

    /**
     * Atribui as Ações do Editor.
     *
     * @param actions
     */
    public void setEntityActions(A actions);

    /**
     * Retorna as Ações do Editor.
     */
    public A getEntityActions();

    /**
     * Atribui a entidade do Editor.
     *
     * @param Serializable
     */
    public void setEntity(Serializable entity);

    /**
     * Retorna a entidade do Editor.
     */
    public Serializable getEntity();

}